import { defineStore, createPinia } from 'pinia';
import { GlobalState, ThemeConfigProps } from './interface';
import { DEFAULT_PRIMARY } from '@/config/config';
import piniaPersistConfig from '@/config/piniaPersist';
import { getUserInfo } from '@/api/modules/login';
import { paraList } from '@/api/modules/user';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
import { getSysParams } from '@/utils/util';

// defineStore 调用后返回一个函数，调用该函数获得 Store 实体
export const GlobalStore = defineStore('GlobalState', {
	// id: 必须的，在所有 Store 中唯一
	// id: '',
	// state: 返回对象的函数
	state: (): GlobalState => ({
		userToken: '',
		// 登陆用户信息
		userInfo: '',
		// 两定机构配置的科室
		selectOrgDept: [],
		// 系统参数
		sysParams: [],
		// 字典
		dictData: [],
		// 医保区划
		admdvsList: [],
		// 机构
		orgList: [],
		orgFilterList: [],
		// element组件大小
		assemblySize: 'default',
		// language
		language: '',
		// 是否是开发环境
		isDevelopment: import.meta.env.MODE === 'development',
		// themeConfig
		themeConfig: {
			// 布局切换 ==>  纵向：vertical | 经典：classic | 横向：transverse | 分栏：columns
			layout: 'vertical',
			// 默认 primary 主题颜色
			primary: DEFAULT_PRIMARY,
			// 左侧菜单栏的字体颜色
			menuTextColor: '#fff',
			// 深色模式
			isDark: false,
			// 灰色模式
			isGrey: false,
			// 色弱模式
			isWeak: false,
			// 折叠菜单
			isCollapse: false,
			// 面包屑导航
			breadcrumb: true,
			// 面包屑导航图标
			breadcrumbIcon: true,
			// 标签页
			tabs: true,
			// 标签页图标
			tabsIcon: true,
			// 页脚
			footer: true,
			// 当前页面是否全屏
			maximize: false,
			// 是否有水印
			isWatermark: false
		}
	}),
	getters: {
		sysParamsGet: state => getSysParams(state.sysParams)
	},
	actions: {
		// setToken
		setToken(token: string) {
			this.userToken = token;
		},
		// 设置机构配置的科室
		async setOrgDept(deptList: string[]) {
			this.selectOrgDept = deptList;
		},
		// setUserInfo
		async setUserInfo() {
			const { user } = await getUserInfo();
			this.userInfo = user;
		},
		// setAssemblySizeSize
		setAssemblySizeSize(assemblySize: string) {
			this.assemblySize = assemblySize;
		},
		// updateLanguage
		updateLanguage(language: string) {
			this.language = language;
		},
		// setThemeConfig
		setThemeConfig(themeConfig: ThemeConfigProps) {
			this.themeConfig = themeConfig;
		},
		// 系统参数
		async setSysParams() {
			if (this.sysParams.length === 0) {
				const { data } = await paraList();
				this.sysParams = data;
			}
		},
		// 设置字典
		setDictData(data: any) {
			this.dictData = data;
		},
		setAdmdv(data: any) {
			this.admdvsList = data;
		},
		setOrgList(data: any) {
			this.orgList = data;
		},
		setOrgFilterList(data: any) {
			this.orgFilterList = data;
		}
	},
	persist: piniaPersistConfig('GlobalState', [
		'userInfo',
		'userToken',
		'selectOrgDept',
		'themeConfig',
		'assemblySize',
		'sysParams',
		'dictData',
		'admdvsList',
		'orgList',
		'orgFilterList'
	])
});

// piniaPersist(持久化)
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);

export default pinia;
